package cn.yza.设计模式.代理模式.动态代理.demo01;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/** 完成代理类要做的功能 1.调用目标方法 2.增强功能
 * @author Honglixi
 * @create 2021-11-01 18:36
 */
public class MySellHandler implements InvocationHandler {

    private Object target = null;

    /**
     *  动态代理目标对象是活动的，不是固定的，需要传入进来
     *  传入是谁，就给谁创建代理
     * @param target
     */
    public MySellHandler(Object target) {
        //给目标对象赋值
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //不改变原来方法功能的前提下，在代理中增强自己的功能
        Object res = null;
        //调用，执行目标方法
        res = method.invoke(target,args);

        //功能增强
        if (res != null) {
            Float price = (Float) res;
            price = price + 25;
            res = price;
        }
        //增加的价格
        return res;
    }
}
